package dominio;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import hbt.*;

import entities.*;


public class Sistema {
	private static Sistema instancia;
	private ArrayList<Cliente> clientes;
	private ArrayList<Maquina> maquinas;
	private ArrayList<Ejercicio> ejercicios;
	
	
	public static Sistema getInstancia() {
		if (instancia==null)
			instancia = new Sistema();
		return instancia;
	}
	
	public Sistema () {
		clientes = new ArrayList<Cliente>();	
		maquinas = new ArrayList<Maquina> ();
		ejercicios = new ArrayList<Ejercicio> ();
		
	}

	
	public boolean agregarMaquina(Maquina maquina) {
		maquinas.add(maquina);
		return true;
	}
	
	public boolean agregarEjercicio(Ejercicio ejercicio) {
		ejercicios.add(ejercicio);
		return true;
	}
	
	
	public Cliente buscarClienteDoc (int nroDoc){
		return ClienteDAO.buscarClientePorDoc(nroDoc);
	}
	
	public boolean existeCliente (int nroDoc){
		return ClienteDAO.existeCliente(nroDoc);
	}
	
	public List<Cliente> getClientes (){
		List <Cliente> clientes = ClienteDAO.getClientes();
		return clientes;
	}
	
	public void setClientes (List<Cliente> clientes){
		ClienteDAO.setClientes(clientes);
	}
	
	public void agregarCliente (Cliente c){
		ClienteDAO.agregarCliente(c);
	}
	
	public void actualizarCliente (Cliente c){
		ClienteDAO.actualizarCliente(c);
	}
	
	public void eliminarCliente (Cliente c){
		ClienteDAO.eliminarCliente(c);
	}
	
	public boolean existeDFCliente (int nrodoc){
		return ClienteDAO.existeDFCliente(nrodoc);
	}
	
	public DatosFisicos buscarUltimoDFporDoc (int nrodoc){
		return ClienteDAO.buscarUltimoDFporDoc(nrodoc);
	}
	
	public void agregarDFCliente (DatosFisicos df){
		ClienteDAO.agregarDFCliente(df);
	}
	
	public Rutina buscarRutinaPorID (int id) {
		return RutinaDAO.buscarRutinaPorID(id);
	}
	
	public void persistRutina(Rutina r) {
		RutinaDAO.persistRutina(r);
	}
	
	public void updateRutina(Rutina r) {
		RutinaDAO.updateRutina(r);
	}
	
	public Ejercicio buscarEjercicioPorNombre (String nombre, int nroDoc){
		DatosFisicos df = ClienteDAO.buscarUltimoDFporDoc(nroDoc);
		String obj = df.getObjetivo();
		return EjercicioDAO.buscarEjercicioPorNombre(nombre, obj);
	}

	public Rutina generarRutina(Cliente cliente, DatosFisicos df) {
		
		Rutina r = new Rutina();
		
		if (cliente.getSexo().matches("femenino")){
			if (df.getObjetivo().matches("Tonificar")){
				
				int cantEjerciciosPorDia = df.getDiasEntrenar();
				System.out.println(cantEjerciciosPorDia);				
				
				if (cantEjerciciosPorDia == 1){
					
					RutinaDAO.updateItemRutinaMT1();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=1;
					
					while (contador < 16){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 2){
					
					RutinaDAO.updateItemRutinaMT2();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=1;
					
					while (contador < 16){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 3){
					
					RutinaDAO.updateItemRutinaMT3();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=1;
					
					while (contador < 16){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 4){
					
					RutinaDAO.updateItemRutinaMT4();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=1;
					
					while (contador < 16){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 5){
					
					RutinaDAO.updateItemRutinaMT5();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=1;
					
					while (contador < 16){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
			}
			if (df.getObjetivo().matches("Adelgazar")){
				
				
				int cantEjerciciosPorDia = df.getDiasEntrenar();
				System.out.println(cantEjerciciosPorDia);				
				
				if (cantEjerciciosPorDia == 1){
					
					RutinaDAO.updateItemRutinaMA1();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=16;
					
					while (contador < 31){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 2){
					
					RutinaDAO.updateItemRutinaMA2();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=16;
					
					while (contador < 31){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 3){
					
					RutinaDAO.updateItemRutinaMA3();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=16;
					
					while (contador < 31){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 4){
					
					RutinaDAO.updateItemRutinaMA4();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=16;
					
					while (contador < 31){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
				if (cantEjerciciosPorDia == 5){
					
					RutinaDAO.updateItemRutinaMA5();
					
					List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
					
					int contador=16;
					
					while (contador < 31){
						ItemRutina ir = new ItemRutina();
						ir = RutinaDAO.buscarItemRutinaPorID(contador);
						itemsRutina.add(ir);
						contador ++;
					}
					
					r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
					r.setItemsRutina(itemsRutina);
					
					int id = RutinaDAO.mergeRutina(r);
					//System.out.println("ID recuperado es: "+id);
					r.setIdRutina(id);
				}
				
			}
			
			
		} else if (cliente.getSexo().matches("masculino")) {
			
				if (df.getObjetivo().matches("Tonificar")){
				
					int cantEjerciciosPorDia = df.getDiasEntrenar();
					System.out.println(cantEjerciciosPorDia);				
				
					if (cantEjerciciosPorDia == 1){
					
						RutinaDAO.updateItemRutinaHT1();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=31;
						
						while (contador < 46){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 2){
						
						RutinaDAO.updateItemRutinaHT2();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=31;
						
						while (contador < 46){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 3){
						
						RutinaDAO.updateItemRutinaHT3();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=31;
						
						while (contador < 46){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 4){
						
						RutinaDAO.updateItemRutinaHT4();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=31;
						
						while (contador < 46){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 5){
						
						RutinaDAO.updateItemRutinaHT5();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=31;
						
						while (contador < 46){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				}
				
				
				if (df.getObjetivo().matches("Adelgazar")){
				
					int cantEjerciciosPorDia = df.getDiasEntrenar();
					System.out.println(cantEjerciciosPorDia);				
				
					if (cantEjerciciosPorDia == 1){
					
						RutinaDAO.updateItemRutinaHA1();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=46;
						
						while (contador < 61){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 2){
						
						RutinaDAO.updateItemRutinaHA2();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=46;
						
						while (contador < 61){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 3){
						
						RutinaDAO.updateItemRutinaHA3();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=46;
						
						while (contador < 61){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 4){
						
						RutinaDAO.updateItemRutinaHA4();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=46;
						
						while (contador < 61){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
					if (cantEjerciciosPorDia == 5){
						
						RutinaDAO.updateItemRutinaHA5();
						
						List <ItemRutina> itemsRutina = new ArrayList <ItemRutina>();
						
						int contador=46;
						
						while (contador < 61){
							ItemRutina ir = new ItemRutina();
							ir = RutinaDAO.buscarItemRutinaPorID(contador);
							itemsRutina.add(ir);
							contador ++;
						}
						
						r.setCliente(ClienteDAO.buscarClientePorDoc(cliente.getNroDoc()));
						r.setItemsRutina(itemsRutina);
						
						int id = RutinaDAO.mergeRutina(r);
						//System.out.println("ID recuperado es: "+id);
						r.setIdRutina(id);
					}
				
				}
		}
		return r;
	}
}
